package findContinuousSequence;


import java.util.ArrayList;
import java.util.List;

public class Solution {
    public int[][] findContinuousSequence(int target) {
        // 暴力+枚举
//        ArrayList<int[]> list = new ArrayList<>();
//
//        int sum = 0,limit = (target-1)/2;
//        for (int i = 1; i <= limit ; i++) {
//            for (int j = i;  ; j++) {
//                sum+=j;
//                if(sum>target){
//                    sum=0;
//                    break;
//                }else if(sum==target){
//                    int[] res = new int[j-i+1];
//                    for (int k = i; k <=j ; k++) {
//                        res[k-i] = k;
//                    }
//                    sum = 0;
//                    list.add(res);
//                    break;
//                }
//            }
//        }
//        return list.toArray(new int[list.size()][]);

//        List<int[]>list = new ArrayList<>();
//        int l = 1,r = 2;
//        while(l<=target/2&&l<r){
//            int sum = (l + r) * (r - l + 1) / 2;
//            if(sum==target){
//                int[] res = new int[r-l+1];
//                for (int i = l; i <=r ; i++) {
//                    res[i-l] = i;
//                }
//                list.add(res);
//                l++;
//            }else if(sum<target){
//                r++;
//            }else {
//                l++;
//            }
//        }
//        return list.toArray(new int[list.size()][]);

        List<int[]>list = new ArrayList<>();
        int l = 1;
        int r = 1;
        int sum = 0;
        while(l<=target/2){
            if(sum<target){  // 如果和比目标值小，继续往右移
                sum+=r;
                r++;
            }else if(sum>target){//如果和比目标值大，减去左边的值，继续右移
                sum-=l;
                l++;
            }else{ // 如果相等，继续向右移动
                int[] res = new int[r-l+1];
                for (int i = l; i <=r ; i++) {
                    res[i-l]=i;
                }
                list.add(res);
                sum-=l;
                l++;
            }
        }
        return list.toArray(new int[list.size()][]);
    }
}
